package thinker.miracle.utils;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 * @author bo.chen
 *
 */
public class JsonUtil {

	/**
	 * 将对象转换成json字符串
	 * 
	 * @param object
	 * @return
	 */
	public static String bean2Json(Object object) {
		String result = null;
		if (object instanceof List<?>) {// 对于复杂的数据结构 用JSONArray解析
			JSONArray json = JSONArray.fromObject(object);
			result = json.toString();
		} else {
			JSONObject json = JSONObject.fromObject(object);
			result = json.toString();
		}
		return result;
	}

	/**
	 * 将json字符串转换成 bean
	 * 
	 * 
	 * @param json
	 *            json字符串
	 * @param clazz
	 *            对象类类型
	 * @return
	 *
	 */
	@SuppressWarnings("unchecked")
	public static <B> B json2Bean(String json, Class<B> clazz) {
		JSONObject jsonObject = JSONObject.fromObject(json);
		return (B) JSONObject.toBean(jsonObject, clazz);
	}

	/**
	 * 
	 * 将json字符串转换成 数组
	 * 
	 * @param json
	 *            json字符串
	 * @param clazz
	 *            集合泛型 类类型
	 * @return
	 *
	 */
	@SuppressWarnings("unchecked")
	public static <B> B[] json2Array(String jsonString, Class<B> clazz) {
		JSONArray array = JSONArray.fromObject(jsonString);
		B[] bArray = (B[]) Array.newInstance(clazz, array.size());
		for (int i = 0; i < array.size(); i++) {
			JSONObject jsonObject = array.getJSONObject(i);
			bArray[i] = (B) JSONObject.toBean(jsonObject, clazz);
		}
		return bArray;
	}

	/**
	 * 
	 * 将json字符串转换成 集合
	 * 
	 * @param json
	 *            json字符串
	 * @param clazz
	 *            集合泛型 类类型
	 * @return
	 *
	 */
	@SuppressWarnings("unchecked")
	public static <B> List<B> json2List(String json, Class<B> clazz) {
		JSONArray array = JSONArray.fromObject(json);
		List<B> list = new ArrayList<B>();
		for (Iterator<B> iter = array.iterator(); iter.hasNext();) {
			JSONObject jsonObject = (JSONObject) iter.next();
			list.add((B) JSONObject.toBean(jsonObject, clazz));
		}
		return list;
	}

}
